package cn.ccew.sys.web.init;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.ccew.apk.model.Software;
import cn.ccew.apk.model.Version;
import cn.ccew.common.base.controller.BaseController;
import cn.ccew.sys.model.SysOrgnization;
import cn.ccew.sys.model.SysPersonnel;
import cn.ccew.sys.model.SysResources;
import cn.ccew.sys.model.SysRole;

@Controller
public class InitController extends BaseController {

	@RequestMapping(value = "init.wb", method = { RequestMethod.GET })
	public @ResponseBody
	Object init() throws Exception {
		baseService.deleteAll(SysPersonnel.class);
		baseService.deleteAll(SysRole.class);
		baseService.deleteAll(SysOrgnization.class);
		baseService.deleteAll(SysResources.class);

		initMun();
		initOrg();
		return "更新完成";
	}

	// 头菜单栏目
	private void initMun() throws Exception {

		SysResources 版本管理 = new SysResources();
		版本管理.setRsName("版本管理");
		版本管理.setPriority(1);
		baseService.saveOrUpdate(版本管理);
		版本管理子功能(版本管理);

		SysResources 系统管理 = new SysResources();
		系统管理.setRsName("系统管理");
		系统管理.setPriority(3);
		baseService.saveOrUpdate(系统管理);
		系统管理子功能(系统管理);
	}

	private void 版本管理子功能(SysResources 版本管理) throws Exception {

		SysResources 版本信息管理 = new SysResources();
		版本信息管理.setRsName("版本信息管理");
		版本信息管理.setPriority(1);
		版本信息管理.setParent(版本管理);
		版本信息管理.setRsFunctionName("apk_manage.createManage(node)");
		版本信息管理.setRsFunctionJsPath("../manage/js/apk/apk_manage.js");
		baseService.saveOrUpdate(版本信息管理);
		
		baseService.deleteAll(Software.class);
		baseService.deleteAll(Version.class);
		
		Software syssoft = new Software();
		syssoft.setText("版本管理器");
		syssoft.setStatus(1);
		syssoft.setDescription("不能删除");
		baseService.saveOrUpdate(syssoft);

		SysResources 关于我们 = new SysResources();
		关于我们.setRsName("关于我们");
		关于我们.setPriority(2);
		关于我们.setParent(版本管理);
		关于我们.setRsFunctionName("life_typeModel.createLifeTypeManage(node)");
		关于我们.setRsFunctionJsPath("../manage/js/complex/life/life_typeManage.js");
		baseService.saveOrUpdate(关于我们);

	}

	/**
	 * 初始化系统管理功能资源
	 * 
	 * @param root
	 * @throws Exception
	 */
	private void 系统管理子功能(SysResources root) throws Exception {

		SysResources sys1 = new SysResources();
		sys1.setRsName("资源管理");
		sys1.setRsFunctionName("sys_resource.createWinDepartManage(node)");
		sys1.setRsFunctionJsPath("../manage/js/sys/sys_resource.js");
		sys1.setPriority(0);
		sys1.setParent(root);
		baseService.saveOrUpdate(sys1);

		SysResources sys2 = new SysResources();
		sys2.setRsName("角色管理");
		sys2.setPriority(1);
		sys2.setParent(root);
		sys2.setRsCustomMark("gsgl");
		sys2.setRsFunctionName("sys_role.createWinManage(node)");
		sys2.setRsFunctionJsPath("../manage/js/sys/sys_role.js");
		baseService.saveOrUpdate(sys2);

		SysResources sys3 = new SysResources();
		sys3.setRsName("组织机构管理");
		sys3.setRsFunctionName("sys_organization.createWinDepartManage(node)");
		sys3.setRsFunctionJsPath("../manage/js/sys/sys_organization.js");
		sys3.setPriority(2);
		sys3.setParent(root);
		baseService.saveOrUpdate(sys3);

		SysResources sys4 = new SysResources();
		sys4.setRsName("人员管理");
		sys4.setRsFunctionName("sys_personnel.createWinPersonnelManage(node)");
		sys4.setRsFunctionJsPath("../manage/js/sys/sys_personnel.js");
		sys4.setPriority(3);
		sys4.setParent(root);
		baseService.saveOrUpdate(sys4);
	}

	private void initOrg() throws Exception {
		SysOrgnization rootOrg = new SysOrgnization();
		rootOrg.setOrgName("系统维护");
		rootOrg.setPriority(0);
		baseService.saveOrUpdate(rootOrg);
		initSysUser(rootOrg);
	}

	private void initSysUser(SysOrgnization org) throws Exception {
		SysPersonnel admin = new SysPersonnel();
		admin.setLoginName("admin");
		admin.setRealName("系统管理员");
		admin.setOrg(org);
		admin.setLoginPassword("123123");
		admin.setInfoState(1);
		admin.setEmail("lxj08193@163.com");
		admin.setPhone("1234567890");
		baseService.saveOrUpdate(admin);

		SysRole superAdmin = new SysRole();
		superAdmin.setRoleName("超级管理员");
		superAdmin.setRoleDescription("超级管理员角色不可修改,拥有系统所有权限");
		superAdmin.setRoleLayer(1);
		baseService.saveOrUpdate(superAdmin);

		SysRole 版本维护 = new SysRole();
		版本维护.setRoleName("版本维护");
		版本维护.setRoleDescription("版本维护");
		版本维护.setRoleLayer(0);
		baseService.saveOrUpdate(版本维护);

		Criteria criteria = baseService.createCriteria(SysResources.class);
		criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		List<SysResources> rootList = criteria.list();
		Set<SysResources> resourcesSet = new HashSet<SysResources>();
		for (SysResources s : rootList) {
			resourcesSet.add(s);
		}
		superAdmin.setResources(resourcesSet);
		baseService.saveOrUpdate(superAdmin);

		admin.setRole(superAdmin);
		baseService.saveOrUpdate(admin);
	}

}
